Flywayで簡単DBマイグレーション
Flywayとは
FlywayとはDBマイグレーションフレームワークです。 複数人でのアプリケーション開発時のDBマイグレーション作業を素早く手軽に行うことができます。 MavenやAnt、APIやコマンドラインツール形式で提供されており、柔軟に対応することができます。
環境構築方法
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.7.4
- MySQL : 5.5.15
flywayを使ってみよう
環境設定
flywayはMavenやAPIからも使用できますが、今回はCommand-line Toolを使ってみましょう。 ここからCommand-line Toolをダウンロードして解凍しておきましょう。
次にテストで使用するデータベースを用意します。今回はMySQLを使用しました。 mysqlを起動し、コンソールからデータベースを作成しておきましょう。
mysql> create database flysample; Query OK, 1 row affected (0.00 sec)
次はここからMySQL用のJDBCドライバをダウンロードします。 ダウンロードしたjarファイルは、解凍したflywayディレクトリのjarsディレクトリにコピーします。
DBへの接続情報を設定します。conf/flyway.propertiesに接続URLとユーザー名、パスワードを記述しましょう。
・ ・ # Jdbc url to use to connect to the database flyway.url=jdbc:mysql://localhost/flysample # User to use to connect to the database (default: <<null>>) flyway.user=<ユーザー名> flyway.password=<パスワード> ・ ・
マイグレーション実行
では、DBに対してマイグレーションを実行してみます。 DBへはsqlファイルを使用して操作をします。sqlディレクトリに実行したいSQL文を記述しましょう。 使用するsqlファイルの名前はとても重要です。今回は「V1__Create_person_table.sql」という名前のファイルを用意しました。 頭の「V」は固定で、その後の数値がバージョン番号を表します。その後に_を2つ続けます。さらにその後ろはDescriptionとなり、 マイグレーション実行ログ(flyway info実行時に確認できる)に記録されます。 ファイル内容は下記のように、テーブルを作成するSQL文になってます。
create table PERSON ( ID int not null, NAME varchar(100) not null );
では、コマンドを実行しましょう。自分の環境の場合、flyway.shを実行します。migrateコマンドを実行すると、先ほどのSQLが実行されます。
%./flyway.sh migrate Flyway (Command-line Tool) v.2.1.1 Creating Metadata table: `flysample`.`schema_version` Current version of schema `flysample`: << Empty Schema >> Migrating schema `flysample` to version 1 Successfully applied 1 migration to schema `flysample` (execution time 00:00.278s).
mysqlを確認してみてください。テーブルが作成されているのがわかります。
mysql> create database flysample; Query OK, 1 row affected (0.00 sec) mysql> use flysample; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +---------------------+ | Tables_in_flysample | +---------------------+ | PERSON | | schema_version | +---------------------+ 2 rows in set (0.00 sec)
では、続けてマイグレーションを行いましょう。sqlディレクトリに「V2__Add_people.sql」という名前でデータ登録用SQLを記述します。
insert into PERSON (ID, NAME) values (1, 'isaka'); insert into PERSON (ID, NAME) values (2, 'ogawa'); insert into PERSON (ID, NAME) values (3, 'minato');
再びmigrateコマンドを実行します。V1で作成したテーブルにデータが登録されます。
%./flyway.sh migrate Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8 Flyway (Command-line Tool) v.2.1.1 Current version of schema `flysample`: 1 Migrating schema `flysample` to version 2 Successfully applied 1 migration to schema `flysample` (execution time 00:00.071s).
まとめ
今回はDBマイグレーションツール、flywayを使ってみました。簡単に使用できますし、いろいろな形式で使用できて便利だと思います。 なお、次バージョンのFlyway 3.0ではSQLiteおよびAndroidのサポートが予定されているようです。